// 各种工具函数
import { isArray, isFunction } from 'radash';
import {message} from 'antd';

const isString=(value)=>{
return false
}


export const isFun=(fun:any)=>{
  return isFunction(fun)
  }
/**
 * 判断是否是Boolean
 * @param value any
 * @returns boolean
 */
export const isBoolean = (value: any) => {
  return typeof value === 'boolean';
};

// ----- Nil
/**
 * 检查给定的值是否为 null 或 undefined，或者是否在提供的其他值数组中。
 * @param value 需要检查的值。
 * @param others 一个包含要检查的其他值的数组，默认为空数组。这个参数允许用户自定义一组值来检查输入值是否包含在其中。
 * @returns 如果 value 为 null、undefined 或者存在于 others 数组中，则返回 true；否则返回 false。
 */
export const isNil = (value: any, others: any = []): boolean => {
  console.log("=============>WER")
  return [undefined, null].concat(others).includes(value)
};

// 暂放，不确定会不会需要这个函数
export const judgment = (condition: any, right: any, fault?: any) => {
  return (isBoolean(condition) ? condition : isNil(condition))
    ? isFunction(right)
      ? right()
      : right
    : isFunction(fault)
      ? fault()
      : fault;
};

/**
 * 过滤数组或者JSON中的空值
 * @param obj
 * @param filter
 * @returns
 */
export const filterNil = (obj: any, filter?: (...args: any) => {}) => {
  if (isNil(obj)) {
    return obj;
  }

  const f: any = filter || ((o: any) => isNil(o));

  if (isArray(obj)) {
    return obj.filter(f);
  }

  const keys: any = Object.keys(obj);

  if (keys.length) {
    return keys.reduce((p: any, c: any) => {
      if (!f(obj[c])) {
        p[c] = isString(obj[c]) ? obj?.[c]?.trim() : obj[c];
      }

      return p;
    }, {});
  }

  return obj;
};
export const objectTrim = (params: any) => {
  if (!params) {
    return params;
  }

  return Object.keys(params).reduce((pre: any, cur: any) => {
    if (!isNil(params[cur], ['']) && isString(params[cur])) {
      pre[cur] = params[cur].trim();
    } else {
      pre[cur] = params[cur];
    }

    return pre;
  }, {});
};

/**
 *
 * @param express try语句执行的内容
 * @param exception 可选 catch语句执行的内容
 * @param fin 可选 finally语句执行的内容
 * @returns
 */
export const capture = (express: () => any, exception?: any, fin?: () => any) => {
  try {
    return express();
  } catch (e) {
    return isFunction(exception) ? exception(e) : exception || e;
  } finally {
    fin?.();
  }
};



/**
 *
 * @param url 下载地址
 * @param filename 修改下载的文件名称
 */
export const download=(url: string, filename?: string)=> {
  console.log("===============download")
  if (!url) {
    return;
  }

  const element = document.createElement('a');

  element.style.display = 'none';
  element.setAttribute('href', url);

  if (filename) {
    element.setAttribute('download', filename);
  }

  document.body.appendChild(element);
  element.click();
  document.body.removeChild(element);
}

//文件下载
export const downloadFile = (msg: string) => {
  message.error(msg);
};
